package com.design.patterns.structuralModel.iterator;

import com.design.patterns.structuralModel.iterator.service.bean.Profile;
import com.design.patterns.structuralModel.iterator.service.file.QQIterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 迭代器模式
 * 目的：提供一种方法顺序访问一个聚合对象中的各个元素，而又不需要暴露该对象的内部表示。
 *
 * 迭代器模式（Iterator）实际上在Java的集合类中已经广泛使用了。我们以List为例，要遍历ArrayList，
 * 即使我们知道它的内部存储了一个Object[]数组，也不应该直接使用数组索引去遍历，因为这样需要了解集合内部的存储结构。
 * 如果使用Iterator遍历，那么，ArrayList和LinkedList都可以以一种统一的接口来遍历：
 */
public class IteratorMain {
    public static void main(String[] args) {
        /**
         * 我们现在模拟去实现遍历qq和微信的档案
         */
        Profile profile = new Profile();
        profile.setEmail("123456@qq.com");
        profile.setName("zhangsan");
        Profile profile2 = new Profile();
        profile2.setEmail("123789@qq.com");
        profile2.setName("lisi");
        Profile profile3 = new Profile();
        profile3.setEmail("123963@qq.com");
        profile3.setName("wanger");
        List<Profile> prifiles =  new ArrayList<>();
        prifiles.add(profile);
        prifiles.add(profile2);
        prifiles.add(profile3);
        /**
         * 这里是集合实现的迭代器
         */
//        Iterator<Profile> iterator = prifiles.iterator();
//        while (iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
        /**
         * 这里是我们实现的迭代器
         */
        QQIterator qqIterator = new QQIterator(prifiles);
        while (qqIterator.hasNext()){
            System.out.println(qqIterator.getNext().toString());
        }
    }
}
